package com.jichaoyun.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jichaoyun.common.model.PagedResult;
import com.jichaoyun.model.entity.Rechargeinfo;


import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
* @author zhen
* @description 针对表【reChargeInfo】的数据库操作Service
* @createDate 2023-12-06 19:34:27
*/
public interface IRechargeinfoService extends IService<Rechargeinfo> {

    /**
     * 获取总充值金额
     * @return
     */
    BigDecimal getTotalReCharge();

    /**
     * 获取IC卡充值笔数
     * @return
     */
    Integer getTotalIcReCharge();

    /**
     * 获取系统充值笔数
     * @return
     */
    Integer getTotalSysReCharge();

    /**
     * 获取辅助充值笔数
     * @return
     */
    Integer getTotalAuxReCharge();

    /**
     * 获取某年某月总充值金额
     * @param start
     * @param end
     * @return
     */
    BigDecimal getTotalReChargeByMonth(LocalDateTime start,LocalDateTime end);

    /**
     * 获取某年某月IC卡充值金额
     * @param start
     * @param end
     * @return
     */
    Integer getTotalIcReChargeByMonth(LocalDateTime start, LocalDateTime end);

    /**
     * 获取某年某月系统充值金额
     * @param start
     * @param end
     * @return
     */
    Integer getTotalSysReChargeByMonth(LocalDateTime start,LocalDateTime end);

    /**
     * 获取某年某月辅助充值金额
     * @param start
     * @param end
     * @return
     */
    Integer getTotalAuxReChargeByMonth(LocalDateTime start,LocalDateTime end);

    /**
     * 获取某站点某月总充值金额
     * @param stationNo
     * @param start
     * @param end
     * @return
     */
    BigDecimal getTotalReChargeByMonthAndStation(Integer stationNo, LocalDateTime start, LocalDateTime end);

    /**
     * 获取某站点某月IC卡充值笔数
     * @param stationNo
     * @param start
     * @param end
     * @return
     */
    Integer getTotalIcReChargeByMonthAndStation(Integer stationNo, LocalDateTime start, LocalDateTime end);

    /**
     * 获取某站点某月系统充值笔数
     * @param stationNo
     * @param start
     * @param end
     * @return
     */
    Integer getTotalSysReChargeByMonthAndStation(Integer stationNo, LocalDateTime start, LocalDateTime end);

    /**
     * 获取某站点某月辅助充值笔数
     * @param stationNo
     * @param start
     * @param end
     * @return
     */
    Integer getTotalAuxReChargeByMonthAndStation(Integer stationNo, LocalDateTime start, LocalDateTime end);

    /**
     * 查询某个用户某年某月每天的充值记录
     * @param stationNo
     * @param start
     * @param end
     * @return
     */
    Map<String, Map<String, Object>> selectChargeListByMonthAndStation(Integer stationNo, LocalDateTime start, LocalDateTime end);

    /**
     * 查询所有用户某年某月每天的充值记录
     * @param start
     * @param end
     * @return
     */
    Map<String, Map<String, Object>> selectAllChargeListByMonth(LocalDateTime start, LocalDateTime end);

    /**
     * 充值渠道分析
     * @return
     */
    Map<String, Object> selectAllChargeWay();

    /**
     * 某年某月充值渠道分析
     * @return
     */
    Map<String, Object> selectAllChargeWayByMonth(LocalDateTime start, LocalDateTime end);

    /**
     * 某用户某年某月充值渠道分析
     * @return
     */
    Map<String, Object> selectAllChargeWayByMonthAndStation(Integer stationNo, LocalDateTime start, LocalDateTime end);

    /**
     * 充值记录查询
     * @param pageNo
     * @return
     */
    PagedResult selectAllChargeInfoListByPage(Integer pageNo);

    /**
     * 单个用户充值记录查询
     * @param pageNo
     * @return
     */
    PagedResult selectAllChargeInfoListByPageAndStaion(Integer pageNo, Integer stationNo);

    /**
     * 获取总充值金额变化率
     * @param year
     * @param month
     * @return
     */
    String getTotalReChargeRate(Integer year, Integer month);

    /**
     * 获取IC卡充值金额变化率
     * @param year
     * @param month
     * @return
     */
    String getICReChargeRate(Integer year, Integer month);

    /**
     * 获取系统充值金额变化率
     * @param year
     * @param month
     * @return
     */
    String getSysReChargeRate(Integer year, Integer month);

    /**
     * 获取辅助充值金额变化率
     * @param year
     * @param month
     * @return
     */
    String getAuxReChargeRate(Integer year, Integer month);

    List<Map<String, Object>> getAccRechargeByUsers();

    Map<String, Float> getAccSpendByUsers();
}
